<!DOCTYPE html>
            <html>
                <head>                    
                    <meta http-equiv="X-UA-Compatible" content="IE=edge">
                    <meta http-equiv="content-type" content="text/html; charset=utf-8">
                    <title>导航制作教程.md</title>
                    <style type="text/css">
                    /*
Copyright (c) 2017 Chris Patuzzo
https://twitter.com/chrispatuzzo
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

body {
  font-family: Helvetica, arial, sans-serif;
  font-size: 14px;
  line-height: 1.6;
  padding-top: 10px;
  padding-bottom: 10px;
  background-color: white;
  padding: 30px;
  color: #333;
}

body &gt; *:first-child {
  margin-top: 0 !important;
}

body &gt; *:last-child {
  margin-bottom: 0 !important;
}

a {
  color: #4183C4;
  text-decoration: none;
}

a.absent {
  color: #cc0000;
}

a.anchor {
  display: block;
  padding-left: 30px;
  margin-left: -30px;
  cursor: pointer;
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
}

h1, h2, h3, h4, h5, h6 {
  margin: 20px 0 10px;
  padding: 0;
  font-weight: bold;
  -webkit-font-smoothing: antialiased;
  cursor: text;
  position: relative;
}

h2:first-child, h1:first-child, h1:first-child + h2, h3:first-child, h4:first-child, h5:first-child, h6:first-child {
  margin-top: 0;
  padding-top: 0;
}

h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor {
  text-decoration: none;
}

h1 tt, h1 code {
  font-size: inherit;
}

h2 tt, h2 code {
  font-size: inherit;
}

h3 tt, h3 code {
  font-size: inherit;
}

h4 tt, h4 code {
  font-size: inherit;
}

h5 tt, h5 code {
  font-size: inherit;
}

h6 tt, h6 code {
  font-size: inherit;
}

h1 {
  font-size: 28px;
  color: black;
}

h2 {
  font-size: 24px;
  border-bottom: 1px solid #cccccc;
  color: black;
}

h3 {
  font-size: 18px;
}

h4 {
  font-size: 16px;
}

h5 {
  font-size: 14px;
}

h6 {
  color: #777777;
  font-size: 14px;
}

p, blockquote, ul, ol, dl, li, table, pre {
  margin: 15px 0;
}

/*
hr {
  border: 0 none;
  color: #cccccc;
  height: 4px;
  padding: 0;
}
*/
body &gt; h2:first-child {
  margin-top: 0;
  padding-top: 0;
}

body &gt; h1:first-child {
  margin-top: 0;
  padding-top: 0;
}

body &gt; h1:first-child + h2 {
  margin-top: 0;
  padding-top: 0;
}

body &gt; h3:first-child, body &gt; h4:first-child, body &gt; h5:first-child, body &gt; h6:first-child {
  margin-top: 0;
  padding-top: 0;
}

a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
  margin-top: 0;
  padding-top: 0;
}

h1 p, h2 p, h3 p, h4 p, h5 p, h6 p {
  margin-top: 0;
}

li p.first {
  display: inline-block;
}

ul, ol {
  padding-left: 30px;
}

ul :first-child, ol :first-child {
  margin-top: 0;
}

ul :last-child, ol :last-child {
  margin-bottom: 0;
}

dl {
  padding: 0;
}

dl dt {
  font-size: 14px;
  font-weight: bold;
  font-style: italic;
  padding: 0;
  margin: 15px 0 5px;
}

dl dt:first-child {
  padding: 0;
}

dl dt &gt; :first-child {
  margin-top: 0;
}

dl dt &gt; :last-child {
  margin-bottom: 0;
}

dl dd {
  margin: 0 0 15px;
  padding: 0 15px;
}

dl dd &gt; :first-child {
  margin-top: 0;
}

dl dd &gt; :last-child {
  margin-bottom: 0;
}

blockquote {
  border-left: 4px solid #dddddd;
  padding: 0 15px;
  color: #777777;
}

blockquote &gt; :first-child {
  margin-top: 0;
}

blockquote &gt; :last-child {
  margin-bottom: 0;
}

table {
  padding: 0;
}
table tr {
  border-top: 1px solid #cccccc;
  background-color: white;
  margin: 0;
  padding: 0;
}

table tr:nth-child(2n) {
  background-color: #f8f8f8;
}

table tr th {
  font-weight: bold;
  border: 1px solid #cccccc;
  text-align: left;
  margin: 0;
  padding: 6px 13px;
}

table tr td {
  border: 1px solid #cccccc;
  text-align: left;
  margin: 0;
  padding: 6px 13px;
}

table tr th :first-child, table tr td :first-child {
  margin-top: 0;
}

table tr th :last-child, table tr td :last-child {
  margin-bottom: 0;
}

img {
  max-width: 100%;
}

span.frame {
  display: block;
  overflow: hidden;
}

span.frame &gt; span {
  border: 1px solid #dddddd;
  display: block;
  float: left;
  overflow: hidden;
  margin: 13px 0 0;
  padding: 7px;
  width: auto;
}

span.frame span img {
  display: block;
  float: left;
}

span.frame span span {
  clear: both;
  color: #333333;
  display: block;
  padding: 5px 0 0;
}

span.align-center {
  display: block;
  overflow: hidden;
  clear: both;
}

span.align-center &gt; span {
  display: block;
  overflow: hidden;
  margin: 13px auto 0;
  text-align: center;
}

span.align-center span img {
  margin: 0 auto;
  text-align: center;
}

span.align-right {
  display: block;
  overflow: hidden;
  clear: both;
}

span.align-right &gt; span {
  display: block;
  overflow: hidden;
  margin: 13px 0 0;
  text-align: right;
}

span.align-right span img {
  margin: 0;
  text-align: right;
}

span.float-left {
  display: block;
  margin-right: 13px;
  overflow: hidden;
  float: left;
}

span.float-left span {
  margin: 13px 0 0;
}

span.float-right {
  display: block;
  margin-left: 13px;
  overflow: hidden;
  float: right;
}

span.float-right &gt; span {
  display: block;
  overflow: hidden;
  margin: 13px auto 0;
  text-align: right;
}

code, tt {
  margin: 0 2px;
  padding: 0 5px;
  white-space: nowrap;
  border: 1px solid #eaeaea;
  background-color: #f8f8f8;
  border-radius: 3px;
}

pre code {
  margin: 0;
  padding: 0;
  white-space: pre;
  border: none;
  background: transparent;
}

.highlight pre {
  background-color: #f8f8f8;
  border: 1px solid #cccccc;
  font-size: 13px;
  line-height: 19px;
  overflow: auto;
  padding: 6px 10px;
  border-radius: 3px;
}

pre {
  background-color: #f8f8f8;
  border: 1px solid #cccccc;
  font-size: 13px;
  line-height: 19px;
  overflow: auto;
  padding: 6px 10px;
  border-radius: 3px;
}

pre code, pre tt {
  background-color: transparent;
  border: none;
}

/* Syntax Highlighting */

.plainText {
 background-color: #FFFFFF;
 color: #000000;
}
.htmlServerSideScript {
 background-color: #FFFF00;
}
.htmlComment {
 color: #008000;
}
.htmlTagDelimiter {
 color: #0000FF;
}
.htmlElementName {
 color: #A31515;
}
.htmlAttributeName {
 color: #FF0000;
}
.htmlAttributeValue {
 color: #0000FF;
}
.htmlOperator {
 color: #0000FF;
}
.comment {
 color: #008000;
}
.xmlDocTag {
 color: #808080;
}
.xmlDocComment {
 color: #008000;
}
.string {
 color: #A31515;
}
.stringCSharpVerbatim {
 color: #A31515;
}
.keyword {
 color: #0000FF;
}
.preprocessorKeyword {
 color: #0000FF;
}
.htmlEntity {
 color: #FF0000;
}
.xmlAttribute {
 color: #FF0000;
}
.xmlAttributeQuotes {
 color: #000000;
}
.xmlAttributeValue {
 color: #0000FF;
}
.xmlCDataSection {
 color: #808080;
}
.xmlComment {
 color: #008000;
}
.xmlDelimiter {
 color: #0000FF;
}
.xmlName {
 color: #A31515;
}
.className {
 color: #48D1CC;
}
.cssSelector {
 color: #A31515;
}
.cssPropertyName {
 color: #FF0000;
}
.cssPropertyValue {
 color: #0000FF;
}
.sqlSystemFunction {
 color: #FF00FF;
}
.powershellAttribute {
 color: #B0E0E6;
}
.powershellOperator {
 color: #808080;
}
.powershellType {
 color: #008080;
}
.powershellVariable {
 color: #FF4500;
}
.type {
 color: #008080;
}
.typeVariable {
 color: #008080;
 font-style: italic;
}
.namespace {
 color: #000080;
}
.constructor {
 color: #800080;
}
.predefined {
 color: #000080;
}
.pseudoKeyword {
 color: #000080;
}
.stringEscape {
 color: #808080;
}
.controlKeyword {
 color: #0000FF;
}
.number {
}
.operator {
}
.delimiter {
}
.markdownHeader {
 font-weight: bold;
}
.markdownCode {
 color: #008080;
}
.markdownListItem {
 font-weight: bold;
}
.italic {
 font-style: italic;
}
.bold {
 font-weight: bold;
}

                    </style>
                </head>
                <body style="">
                <h2 id="0">导航制作教程</h2>
<h3 id="2">1. 画面的文件夹命名</h3>
<p id="4">画面文件夹/panels路径下，每个子系统应当用不同的文件夹存储画面的路径。</p>
<p id="6">命名规范：</p>
<pre><code id="7">&lt;系统名&gt;_SYS
</code></pre>
<p id="11">如 <code>MEP_SYS</code>、<code>CR03_SYS</code></p>
<p id="13"><code>MEP_SYS</code>:存放MEP子系统的系统工艺流程图画面<br />
<code>MEP_M</code>：存放MEP子系统的设备模版<br />
<code>MEP_tools</code>：存放MEP子系统的导点工具
<code>para</code> :拓扑模版</p>
<p id="18">目的是保证各个系统包开发画面路径全局绝对唯一。</p>
<p id="20">禁止在MEP_SYS文件夹下存储除了工艺流程图之外的其他文件。</p>
<p id="22">注意：</p>
<ol id="23">
<li id="23">文件夹就是自动生成的导航的拓扑！</li>
<li id="24">只能在当前项目中的panels文件夹。不支持库的panels文件夹。</li>
<li id="25">只支持*.xml格式的panel文件。（ *.pnl格式无法解析 ）</li>
</ol>
<h3 id="27">2. 修改<code>PT.xml</code>拓扑生成工具</h3>
<p id="29">将<code>LIB/panels/PT.xml</code>文件存储到<code>&lt;项目&gt;/panels/&lt;系统名&gt;_Tools/PT.xml</code>，用于项目的拓扑生成工具。</p>
<p id="31">打开画面的scopelib脚本（画面的全局脚本），修改如下的几个变量</p>
<div id="32" class="lang-c editor-colors"><div class="cplusplus"><pre>
<span class="comment">// !!!此处填写一级子系统文件夹，如 &quot;MEP_SYS&quot;</span>
<span class="keyword">const</span> string gs_sys_path = <span class="string">&quot;MEP_SYS&quot;</span>;

<span class="comment">// !!!此处填写二级导航文件夹，如&quot;F1&quot;</span>
<span class="keyword">const</span> string gs_navi_foldername = <span class="string">&quot;F1&quot;</span>;

<span class="comment">// !!!此处填写一级子系统文件夹下的忽略文件夹名称数组</span>
<span class="keyword">const</span> dyn_string gs_ignore_foldername = makeDynString(<span class="string">&quot;MEP_M&quot;</span>,
                                        <span class="string">&quot;MEP_PUBLIC&quot;</span>);

</pre></div>
</div>
<p id="44">如下图：</p>
<p id="46"><img src="p1.png" alt="" /></p>
<p id="48">MEP_SYS文件夹下有唯一的文件夹：F1，用于代表MEP一期的工艺画面。</p>
<h3 id="50">3. 一键生成画面拓扑</h3>
<p id="52">如下图，点击“LIB_画面拓扑生成器”按钮，将自动生成拓扑导航文件。</p>
<p id="55"><img src="p4.png" alt="" /></p>
<p id="57">同时，会生成一个<code>导航.xml</code>的导航文件。</p>
<p id="59"><img src="p2.png" alt="" /></p>
<p id="61">生成过程中，会自动解析(*.xml)  文件中包含的报警点位的dpe，并将画面绑定到含有报警的dpe属性_alert_hdl.._panel中。

<img src="p3.png" alt="" /></p>
<p id="67">&quot;清理导航文件&quot;按钮，点击后会自动清理上述自动生成的xml拓扑文件（也会清理 导航.xml)。</p>
<h3 id="69">4. 部署<code>导航.xml</code></h3>
<p id="71">生成的导航.xml文件可直接拖拽到对应模板的 <code>naviPanel_1920_1080_MEP.pnl</code></p>
<p id="73"><img src="p5.png" alt="" /></p>
<h3 id="75">5. 拓扑及报警汇总</h3>
<p id="77">打开拓扑编辑器，查看报警等级范围是否如下，如果不是，需要进行编辑符合下图。</p>
<p id="79"><img src="p6.png" alt="" /></p>
<p id="81">依次点击&quot;全部树节点“和保存，及检查按钮。</p>
<p id="83"><img src="p7.png" alt="" /></p>
<h3 id="85">【结束】</h3>
<p id="86">运行进行测试。</p>

                </body>
            </html>
            